package Bot

import (
	"fmt"
	"os"
	"GoBox/src/Scripts"
	"context"
	"github.com/go-redis/redis/v8"
	"os/exec"
	"time"
)

var (
	Config_path string
)

func Init2(config_path string) {
	Config_path = config_path
}
// init 初始化，赋值
func init() {
	Init2(Config_path)
}

func About() {
	clearLog()
	//如需贡献代码，请加入QQ群：546537258  作者：@图一多
	//输出用fmt.Printf，颜色用"github.com/fatih/color"，到时候我改成ui库，这样我改起来方便
	//其他适配其他Bot，再src里面新建一个包，再menu里面添加一个菜单，
	//格式：昵称+github或gitee地址
var about = `
	作者：@图一多
	gitee：https://gitee.com/Liplay-1/YBOX
	版本：v2.0.3
	QQ群：546537258
	
	感谢：
	振宇计算提供下载服务器: https://www.vmscc.cn
	
	贡献者:

	感谢以下开源项目：
	TRSS_Yunzai: https://gitee.com/TimeRainStarSky/Yunzai
	Alemon-Bot: https://gitee.com/ningmengchongshui/alemon-bot
	Yunzai: https://github.com/Le-niao/Yunzai-Bot
	`
	fmt.Printf(about)
	//按任意键退出
	fmt.Scanln()

}



func Go_Box_menu_switch() {
	var Go_Box_menu_switch = `
	===========GOBOX工具箱===========
	  1.柠檬崽Alemon(频道)
	  2.TRSS云崽(频道)
	  3.云崽Bot(QQ群)
	  0.退出
	请输入菜单编号：`
	var choice int
	for {
		clearLog()
		fmt.Printf("\033[34m")
		fmt.Print(Go_Box_menu_switch)
		// 测试打印获取的变量
		fmt.Scanln(&choice)
		switch choice {
		case 1:
			//
			// 打印配置文件
			fmt.Println(Config_path)
			// 修改配置文件bot_id

			if AlemonPath == "" {
				fmt.Print("柠檬崽,没有安装...")
				time.Sleep(3 * time.Second)
				return
			}
			// 读取配置文件，修改配置文件bot_id，并写入
			// 重启bot
		case 2:
			// 2.TRSS云崽
			fmt.Println("2.TRSS云崽")
			// 修改配置文件bot_id
			// 重启bot
		case 3:
			// 3.云崽Bot
			fmt.Println("3.云崽Bot")
			// 修改配置文件bot_id
			// 重启bot
		case 0:
			// 0.退出
			os.Exit(0)
		default:
			fmt.Println("输入错误，请重新输入")
		}

	}
}

func Go_Box_menu() {
	var Go_Box_menu = `
	===========GOBOX工具箱===========
	  1.安装BOT机器人(频道)
	  2.安装ICQQ机器人(QQ群)
	  3.安装CQHTTP机器人(QQ群,不可用)
	  4.关于GOBOX
	  -1. 检查更新
	  0.退出
	请输入菜单编号：`
	var choice int
	for {
		clearLog()
		fmt.Printf("\033[34m")
		fmt.Print(Go_Box_menu)
		// 测试打印获取的变量
		fmt.Scanln(&choice)
		switch choice {
		case 1:
			Scripts.RUN_main(GoBoxPath,"install.sh",GoBoxPath)
			os.Exit(0)
		case 2:
			Scripts.RUN_main(GoBoxPath,"install2.sh",GoBoxPath)
			os.Exit(0)
		case 4:
			About()
		case -1:
			// -1. 检查更新
			UpdateGoBox()
		case 0:
			// 0.退出
			os.Exit(0)
		default:
			fmt.Println("输入错误，请重新输入")
		}

	}
}
//GoBox菜单切换，需要用户输入id进行切换，并且把配置文件bot_id 修改为对应的id，重启bot

// 检查Redis是启动
func checkRedis() (*redis.Client, error) {
    // 创建Redis客户端，进行PING操作
    redisClient := redis.NewClient(&redis.Options{
        Addr:     "127.0.0.1:6379",
        Password: "",
        DB:       0,
    })
    ctx := context.Background()
    _, err := redisClient.Ping(ctx).Result()
    if err == nil {
        // Redis已启动，直接返回Redis客户端
        return redisClient, nil
    }

    // Redis未启动，执行启动命令
	path := os.Getenv("PATH")
    path = fmt.Sprintf("%s:%s", "/usr/bin", path)
    cmd := exec.Command("redis-server", "--save", "900", "1", "--save", "300", "10", "--daemonize", "yes")
	cmd.Env = []string{fmt.Sprintf("PATH=%s", path)}
	// 打印环境，测试
	// fmt.Println(cmd.Env)
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    err = cmd.Start()
    if err != nil {
        return nil, err
    }

    // 等待Redis启动完成
    for i := 0; i < 10; i++ {
        _, err := redisClient.Ping(ctx).Result()
        if err == nil {
            return redisClient, nil
        }
    }

    // Redis启动失败，返回错误
    return nil, fmt.Errorf("failed to start Redis")
}
// redis main
func Redis_main() {
	Redis_start,err := checkRedis()
	if err != nil {
		fmt.Println("\033[31m Redis启动失败,请检查是否缺失依赖,或者尝试手动启动...", "\033[0m")
		time.Sleep(3 * time.Second)
		return
	}
	defer Redis_start.Close()
	//输出执行结果
	fmt.Println("\033[32m Redis检查成功,正在启动...\033[0m")
}